package com.lx.common;

import com.lx.wrapper.every.LambdaGenericJoinWrapper;
import com.lx.wrapper.impl.LambdaDeleteWrapper;
import com.lx.wrapper.impl.LambdaQueryWrapper;
import com.lx.wrapper.impl.LambdaUpdateWrapper;

/**
 * wrapper 相关类工具转换
 *
 * @author lx
 * @create 2023/2/27 10:55
 **/
public class Wrappers {

    /**
     * 构建一个Query语句对象
     *
     * @param <MainEntity>
     * @return
     */
    public static <MainEntity> LambdaQueryWrapper<MainEntity> queryWrapper() {
        return new LambdaQueryWrapper<MainEntity>();
    }

    /**
     * 构建一个Query语句对象
     *
     * @param entityClass  实体类型
     * @param <MainEntity>
     * @return
     */
    public static <MainEntity> LambdaQueryWrapper<MainEntity> queryWrapper(Class<MainEntity> entityClass) {
        return new LambdaQueryWrapper(entityClass);
    }

    /**
     * 构建一个通用的 Join Query语句对象
     * 注意:
     * 1.主实体类必传
     * 2.Join类型范围支持请参考 {@link com.lx.constant.enums.GenericJoinTypeEnum}
     *
     * @param entityClass  实体类型
     * @param <MainEntity>
     * @return
     */
    public static <MainEntity> LambdaGenericJoinWrapper<MainEntity> genericJoinWrapper(Class<MainEntity> entityClass) {
        return new LambdaGenericJoinWrapper(entityClass);
    }

    /**
     * 构建一个Update语句对象
     *
     * @param <MainEntity>
     * @return
     */
    public static <MainEntity> LambdaUpdateWrapper<MainEntity> updateWrapper() {
        return new LambdaUpdateWrapper<MainEntity>();
    }

    /**
     * 构建一个Update语句对象
     *
     * @param entityClass  实体类型
     * @param <MainEntity>
     * @return
     */
    public static <MainEntity> LambdaUpdateWrapper<MainEntity> updateWrapper(Class<MainEntity> entityClass) {
        return new LambdaUpdateWrapper(entityClass);
    }

    /**
     * 构建一个Delete语句对象
     *
     * @param <MainEntity>
     * @return
     */
    public static <MainEntity> LambdaDeleteWrapper<MainEntity> deleteWrapper() {
        return new LambdaDeleteWrapper<MainEntity>();
    }

    /**
     * 构建一个Delete语句对象
     *
     * @param entityClass  实体类型
     * @param <MainEntity>
     * @return
     */
    public static <MainEntity> LambdaDeleteWrapper<MainEntity> deleteWrapper(Class<MainEntity> entityClass) {
        return new LambdaDeleteWrapper(entityClass);
    }

    public static void main(String[] args) {

    }

}
